package com.lx.dynamicdatasouce.mybatis.demo.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lX
 * @version JDK 8
 * @className DynamicDataSource (此处以class为例)
 * @date 2024/10/7
 * @description TODO
 */
@Component
@Primary   // 将该Bean设置为主要注入Bean
public class DynamicDataSource  extends AbstractRoutingDataSource {



    // 当前使用的数据源标识
    public static ThreadLocal<String> name=new ThreadLocal<>();


    // 写
    @Autowired
    DataSource dataSource1;
    // 读
    @Autowired
    DataSource dataSource2;



    //获取当前线程数据源key 方便后续匹配
    @Override
    protected Object determineCurrentLookupKey() {
        return name.get();
    }


    @Override
    public void afterPropertiesSet() {

        // 为targetDataSources初始化所有数据源
        Map<Object, Object> targetDataSources=new HashMap<>();
        //写数据源 按照k-v 放入目标数据源中存储
        targetDataSources.put("W",dataSource1);
        //读数据源,按照K-V 放入目标数据源中存储
        targetDataSources.put("R",dataSource2);
        //设置目标数据源
        super.setTargetDataSources(targetDataSources);

        //设置默认的数据源
        super.setDefaultTargetDataSource(dataSource1);

        super.afterPropertiesSet();
    }
}
